/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ambimmort.prserver.repository.webservice;


import com.ambimmort.prserver.bean.RepositoryOperationBean;
import com.ambimmort.prserver.bean.RepositoryOperationLogBean;
import com.ambimmort.prserver.bean.SVNFileBean;
import java.util.List;
import javax.jws.WebService;
/**
 *
 * @author 定巍
 */
@WebService
public interface PRMWebService {

    /**
     * 创建一个指定类型的策略仓库实例
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     */
    public void createRepository( String type, String instance);

    /**
     * 删除一个指定类型的策略仓库实例
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     */
    public void deleteRepository( String type, String instance);

    /**
     * 获取指定类型的所有仓库实例列表
     * @param type 仓库类型名称
     * @return 该类型的所有仓库实例
     * @see com.ambimmort.prserver.repository.webservice.InstanceBean
     */
    public List<InstanceBean> listRepositories( String type);

    /**
     * 获取所有的仓库类型列表（无重复项）
     * @return 所有的仓库类型列表
     */
    public List<String> listRepositoryTypes();

    /**
     * 添加一个策略，并返回仓库操作日志
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param policy 策略文件内容
     * @param comment 策略文件描述
     * @return 仓库操作日志
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public RepositoryOperationLogBean addPolicy( String type,  String instance,  String policy, String comment);

    /**
     * 更新一个策略，并返回仓库操作日志
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param messageNo 策略号
     * @param policy 策略内容
     * @param comment 策略描述
     * @return 仓库操作日志
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public RepositoryOperationLogBean updatePolicy( String type,  String instance,  int messageNo, String policy, String comment);

    /**
     * 删除一个策略，并返回仓库操作日志
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param messageNo 策略号
     * @return 仓库操作日志
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public RepositoryOperationLogBean deletePolicy( String type,  String instance, int messageNo);

    /**
     * 根据指定的MessageNo来获取该策略的最新版本和内容
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param messageNo 策略号
     * @return 仓库操作日志
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public RepositoryOperationLogBean getMessage( String type,  String instance, int messageNo);

    /**
     * 根据指定的MessageNo来获取该策略的所有版本和内容
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param messageNo 策略号
     * @return 仓库操作日志列表
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public List<RepositoryOperationLogBean> getMessageLogs( String type,  String instance, final int messageNo);

    /**
     * 获取某一个策略仓库的所有最新策略。
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @return 一组{@link com.ambimmort.prserver.bean.SVNFileBean}对象
     * @deprecated 请使用带分页功能的{@link #getMessageLogs(java.lang.String, java.lang.String, int) }
     */
    public List<SVNFileBean> getHeadPolicies( String type,  String instance);

    /**
     * 获取某一个策略仓库所包含的策略数量
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @return 策略数量
     */
    public long getHeadPoliciesCount(String type, String instance);

    /**
     * 获取某一个策略仓库的所有最新策略
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param pageCount 每页显示数量
     * @param page 页码
     * @return 一组策略库操作日志
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public List<RepositoryOperationLogBean> getHeadPoliciesWithLog( String type,  String instance, int pageCount, int page);

    /**
     * 对于某个策略仓库实例，根据startVersion的值，获取从startVersion到最新版本之间的所有变更仓库操作日志
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @param startVersion 其实版本号
     * @return 一组策略库操作日志
     * @see com.ambimmort.prserver.bean.RepositoryOperationLogBean
     */
    public List<RepositoryOperationBean> getUpdatingOperationBeans( String type,  String instance, long startVersion);

    /**
     * 获取某个仓库最新的版本号
     * @param type 仓库类型名称
     * @param instance 仓库实例名称
     * @return 最新版本号
     */
    public long getHeadVersion(String type, String instance);



}
